/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package herancapessoa.negocio;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.swing.JOptionPane;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

/**
 *
 * @author Ricky
 */
@Entity
@Table
public class Pessoa implements Serializable {
    
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    
    protected String nome;
    
    protected String tel;
    
    protected String email;
    
    @ManyToOne
    @Cascade(CascadeType.ALL)
    protected Endereco end;
    
    protected float valMaxEmp;
    
    protected float valEmp = 0f;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Endereco getEnd() {
        return end;
    }

    public void setEnd(Endereco end) {
        this.end = end;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public float getValEmp() {
        return valEmp;
    }

    public void setValEmp(float valEmp) {
        this.valEmp = valEmp;
    }

    public float getValMaxEmp() {
        return valMaxEmp;
    }

    public void setValMaxEmp(long valMaxEmp) {
        this.valMaxEmp = valMaxEmp;
    }
    
    public String getDadosPessoa() {
        return "Nome: " + nome + "\n" + 
                "Tel: " + tel + "\n" + 
                "Email: " + email + "\n" + 
                "Limite: " + valMaxEmp +"\n" +
                "Saldo: " + valEmp + "\n" +
                end.toString();
    }
    
    public void emprestar(float qtd) throws OperationException{
        if ((valEmp+qtd) < valMaxEmp) {
            throw new OperationException("Quantia máxima de empréstimo excedida");
        } else {
            valEmp = valEmp + qtd;
        }
        
    }
    
    public void devolver(float qtd) throws OperationException{
        if ((valEmp+qtd) > 0) {
            throw new OperationException("Quantia de devoluçao superior ao empréstimo registrado");
        } else {
            valEmp = valEmp + qtd;
        }
    }

    
    
    private class OperationException extends Exception {
        
        private String error;
        
        OperationException(String msg) {
            this.error = msg;
            JOptionPane.showMessageDialog(null, msg);
        }
        
        @Override
        public String getMessage() {
            return error;
        } 
    }
}
